# -*- coding: utf-8 -*-
"""
@Time    : 2024/8/1 14:12 
@Author  : ZhangShenao 
@File    : 1.响应数据.py 
@Desc    : 响应数据

Flask会将视图函数的返回值,自动包装成Response类型
也可以使用make_response函数来手动创建Response对象
还可以手动实例化Response对象
"""

from flask import Flask, Response, jsonify

app = Flask(__name__)
app.config["DEBUG"] = True


@app.route("/html_response", methods=["GET"])
def html_response() -> [str | Response]:
    """HTML文本响应"""

    # 下面几种构造Response的方式是等价的

    # 方式1: 直接返回业务数据,Flask会自动把返回值包装成Response对象,并返回200状态码
    html = "<h1>Welcome to Flask!</h1>"
    # return html

    # 方式2: 通过Flask提供的make_response方法,构造Response对象
    # resp = make_response(html, 200)
    # return resp

    # 方式3: 手动实例化Response对象
    resp = Response(html, status=200, mimetype="text/html")
    return resp


@app.route("/json_response", methods=["GET"])
def json_response() -> Response:
    """json格式的数据响应"""

    data = {
        "name": "zsa",
        "age": "18",
    }

    # 方式1: 手动构造json数据返回
    # 需要手动指定response的Content-Type为application/json
    # json_data = json.dumps(data)
    # return Response(json_data, status=200, content_type="application/json")

    # 方式2: 通过Flask内置的jsonify函数,直接返回json格式数据
    # 推荐采用这种方式
    return jsonify(data)


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
